O presente documento é um artefato intermediário da metodologia que apresenta os cálculos empregados e se encontra em desenvolvimento.

1) Contextualização

A figura 1 ilustra o racional utilizado e tem como principias referências estudos de pesquisadores como Tomblin Murphy et al. (2016), Mackenzie et al. (2022), Laurece e Karnon (2017), Asamani, Christmals e Reitsma (2021)

Figura 1 - Demanda por serviços

2) Análise de dados notificação da dengue

A primeira informação relevante que precisamos considerar aqui é o número de casos que temos na região de saúde selecionada. A consulta abaixo acessa o datalake para computar o número notificaçoes ao longo do tempo de acordo com registros do Sistema de Informação de Agravo e Notificação (SINAN).

df_dengue <- 
  sqlQuery(channel,'SELECT * FROM "Analytics Layer".Epidemiológico."Casos de Dengue por ano e região de saúde"')

DT::datatable(df_dengue)

Observa-se que a coluna classificacao_final é formada por múltiplas opções, inclusive por casos notificados, mas posteriormente descartados.

df_dengue %>%  
  group_by(classificacao_final) %>% 
  summarise(quantidade = sum(QTD))
## # A tibble: 10 x 2
##    classificacao_final         quantidade
##    <chr>                            <int>
##  1 Dengue                         8839613
##  2 Dengue com sinais de alarme      82291
##  3 Dengue grave                      7381
##  4 Descartado                     5705780
##  5 DESCONHECIDO - cod. 2            32821
##  6 DESCONHECIDO - cod. 3             8871
##  7 DESCONHECIDO - cod. 4              454
##  8 DESCONHECIDO - cod. 6                3
##  9 Ignorado                         97102
## 10 Inconclusivo                   2124911

Seguindo procedimentos adotados por departamentos de vigilância epidemiológica, faremos um recorte entre casos notificados e confirmados. Os primeiros contempla os casos descartados, desconhecidos, ignorados e inconclusivos.

df_dengue_conf_notif <- 
  df_dengue %>% 
        mutate(tipo_classificacao = case_when(classificacao_final == "Dengue" ~ "Confirmado",
                                              classificacao_final == "Dengue com sinais de alarme" ~ "Confirmado",
                                              classificacao_final == "Dengue grave" ~ "Confirmado",
                                              TRUE ~ "Notificado"))

df_dengue_conf_notif %>%  
  group_by(tipo_classificacao) %>% 
  summarise(quantidade = sum(QTD))
## # A tibble: 2 x 2
##   tipo_classificacao quantidade
##   <chr>                   <int>
## 1 Confirmado            8929285
## 2 Notificado            7969942

Vamos visualizar apenas a evolução de casos no Centro-Oeste para se ter uma compreensão da dinâmica.

a <- df_dengue_conf_notif %>%  
  group_by(ano_sintomas, uf, tipo_classificacao) %>%
  summarise(QTD = sum(QTD)) %>% 
  filter(uf == "Goiás" | uf == "Mato Grosso" |
         uf == "Mato Grosso do Sul" |
         uf == "Distrito Federal") %>% 
  ggplot(aes(x = ano_sintomas, y = QTD, fill = tipo_classificacao)) + 
  geom_col() + facet_wrap(~uf, scales = "free_y") + theme_minimal() + 
  xlab("Ano") + xlab("Casos notificados e confirmados") + 
  ggtitle("Casos notificados e confirmados de Dengue", "Fonte: SINAN")
## `summarise()` has grouped output by 'ano_sintomas', 'uf'. You can override using
## the `.groups` argument.
plotly::ggplotly(a)

3) Serviços baseados na necessidade

Vamos acessar apenas uma região de saúde para empregar os cálculos de necessidade, uma vez que a jornada do usuário no Sisdim se dá no nível de análise região de saúde. Além disso, vamos acessar apenas o ano de 2021, pois ainda não temos previsões realizadas.

b <- df_dengue_conf_notif %>% 
  filter(uf == "Goiás" & regiao_saude_pad == "CENTRAL" & ano_sintomas == 2021) %>% 
  ggplot(aes(x = fct_reorder(classificacao_final, QTD), y = QTD)) + 
  geom_col() + coord_flip() + theme_minimal() + 
  xlab("Classificação") + ylab("Quantidade")

plotly::ggplotly(b)

De acordo com o mapeamento da jornada do usuário, conforme figura 1, mas também disponível nesse link, o paciente com caso suspeito poderá seguir alguns caminhos.

Figura 1 - Jornada do paciente

Se ele não possuir sinais de alarme ou choque, pode:

  1. ser conduzido à hidratação oral e, posteriormente, retornar ao serviço de saúde no prazo de 3 a 6 dias
  2. caso possua comorbidades ou prova do laço positiva, ser conduzido à hidratação oral e reavaliação constante em regime ambulatorial ou manutenção em leito de observação.

Se o paciente possuir sinais de alarme ou choque, pode:

  1. Ser acompanhado em leitos de internação por, no mínimo, 48h
  2. Ser acompanhado em unidade de internação em regime de tratamento intensivo

3.1) Pressupostos

  1. Vamos assumir que todos os casos de dengue, ignorados, descartados e inconclusivos passarão pelo fluxo de número 1, uma vez que se o usuário dá entrada no serviço de saúde, ocorre a notificação - independente se vier a ser confirmada ou não no futuro - e, consequentemente, a assistência mínima.

  2. Vamos assumir, por enquanto, que 60% dos pacientes sigam o fluxo 1 e 40% siga o fluxo 2. Ainda vamos estudar formas de determinar melhor o percentual de casos que segue o fluxo 1 e 2. Uma das estratégias é verificar pelo próprio SINAN se o paciente possui comorbidades. Se houver um número muito elevado de casos omissos para essas variáveis no SINAN, outra estratégia é verificar a prevalência de doenças crônicas na população do estado por faixa etária, conforme dados da Pesquisa Nacional de Saúde (PNS), conjugado às idades dos pacientes registrados no SINAN.

  3. Os fluxos 3 e 4 devem ser mensurados de modo diferente, possivelmente utilizando como proxy a quantidade de dias em internação.

  4. O SINAN não tem variável que indica a evolução para internação, apenas para óbito. Portanto, a partir dessa base não é possível identificar quais os casos do fluxo 2 evoluem para o fluxo 3

  5. Para o presente exemplo vamos assumir alguns tempos, porém, isso será objeto de parametrização do usuário do Sisdim.

Com base na premissas a e b assumidas acima, temos a seguinte resultado. Lembrando que vamos assumir que 60% dos 18584 pacientes vão seguir o fluxo 1 e 40% o fluxo 2.

dengue_fluxo <- 
  df_dengue %>% 
        filter(uf == "Goiás" & regiao_saude_pad == "CENTRAL" & ano_sintomas == 2021) %>% 
        mutate(fluxo = case_when(classificacao_final == "Dengue com sinais de alarme" ~ "Fluxo 3",
                                 classificacao_final == "Dengue grave" ~ "Fluxo 4",
                                 TRUE ~ "Fluxo 1 ou 2")) %>% 
        group_by(uf, regiao_saude_pad, fluxo) %>% 
        summarise(total = sum(QTD))
## `summarise()` has grouped output by 'uf', 'regiao_saude_pad'. You can override
## using the `.groups` argument.
dengue_fluxo
## # A tibble: 3 x 4
## # Groups:   uf, regiao_saude_pad [1]
##   uf    regiao_saude_pad fluxo        total
##   <chr> <chr>            <chr>        <int>
## 1 Goiás CENTRAL          Fluxo 1 ou 2 18584
## 2 Goiás CENTRAL          Fluxo 3        434
## 3 Goiás CENTRAL          Fluxo 4         31

Com base na premissa c, vamos trabalhar inicialmente apenas com os fluxos 1 e 2. Além disso, com base na premissa e, os tempos foram assumidos, mas reconfigurações de tempo podem ser realizadas no Sisdim.

Figura 3 - Procedimentos necessários

Os procedimentos marcados em amarelo podem ser ajustados também pelo usuário do Sisdim. O hemograma completo do fluxo 1, por exemplo, não é realizado, obrigatoriamente, para todos os casos, ficando a critério do médico. Portanto, assumimos uma frequência de 0.25, ou seja, solicitação de um exame para cada quatro pacientes. Porém, mais um vez, é um parâmetro que pode ser ajustado em sistema.

4) Profissionais necessários